<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <h2>props的取名和单项数据流</h2>
      <button @click="count++">btn</button>
      <child :count-num="count"></child>
    </div>

    <script src="./lib/vue3.js"></script>
    <script>
      const { createApp } = Vue;

      // 自定义属性的取名规范
      // 1. 顾名思义,语义化
      // 2. 如果名字比较长，建议使用连字符
      // 3. props接收的时候使用小驼峰
      const Child = {
        props: ["countNum"],
        template: `
          <div>child组件 - {{ countNum }}</div>
          <button @click="fn">btn</button>
        `,
        methods: {
          fn() {
            // console.log(this.countNum);
            // 所有的 props 都遵循着**单向绑定**原则(`单项数据流`)，props 因父组件的更新而变化，自然地将新的状态向下流往子组件，而不会逆向传递。这避免了子组件意外修改父组件的状态的情况，不然应用的数据流将很容易变得混乱而难以理解。

            // props的值是不能够被修改的
            this.countNum = 10;

            // 在vue2里面是可以改的动的，但是会报错

            // 单向数据流：props的值只能通过父组件单行向下传递给子组件，子组件里面无法修改接收到的props的值
          },
        },
      };

      createApp({
        data() {
          return {
            count: 3,
          };
        },
        components: {
          Child,
        },
      }).mount("#app");
    </script>
  </body>
</html>
